package com.ftg.learn.chapter07;


/**
 * @author kangjx
 * @date 2022/12/28
 */
public class String02 {

    public static void main(String[] args) {
        String str = new String("sfsdafdsafdsa");
        System.out.println(str);

        System.out.println("a".hashCode());
        System.out.println("b".hashCode());
        System.out.println("c".hashCode());
        //两个不同的字符串会产生相同的hashcode: hash冲突

        String a1 = "abc";
        String a2 = "abc";

        //String jvm内部对String进行优化，字符串常量池
        //1 不能存储重复数据
        //2 ""字符串实例直接存储

        String a3 = new String("abc");
        String a4 = new String("abc");


        String a5 = a1;

        System.out.println(a1 == a2);
        System.out.println(a3 == a4);

        // arrays.deepequals() equals 判断字符串字面值是否相等
        //equals就是把字符串转换成为数组，取里面的每一个元素 ，判断他们是否相等
        System.out.println(a1.equals(a2));
        System.out.println(a1.equals(a4));


        System.out.println(a1.equalsIgnoreCase("ABC"));

        //jdk 1.8没有区别
//        + concat() 叫字符串连接运算符  方法
        //jdk1.7 "a" 常量池  "b" 常最池  "b"  "ab"
        //jdk1.8以前，字符串的连接运算不让使用  + ，会产生额外的常量池空间。 做了一个优化  stringbuilder .append()
        System.out.println("a" + "b");
        System.out.println("a".concat("b"));

        String s1 = "a";
        String s2 = "b";
        String s3 = s1 + s2;
        //s3指向了堆里面的开启的空间了
//        String s3 = new StringBuilder().append(s1).append(s2).toString();
        String s4 = "ab";//常量池
        //字符串连接运算符 ...  常量池里面直接创建
        String s5 = "a" + "b"; //常量池
        String s6 = s1 + "b";  //

        System.out.println(s3 == s4);
        System.out.println(s5 == s4);
        System.out.println(s5 == s6);

        //后面会有这样的题


    }

}
